package com.ruoyi.puyu.mapper;

import com.ruoyi.puyu.domain.PuyuStudent;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;

/**
 * 学员Mapper接口
 * 
 * @author wusongwen
 * @date 2024-05-01
 */
public interface PuyuStudentMapper 
{
    /**
     * 查询学员
     * 
     * @param studentId 学员主键
     * @return 学员
     */
    public PuyuStudent selectPuyuStudentByStudentId(Long studentId);

    /**
     * 查询学员
     *
     * @param studentCode 学员学号
     * @return 学员
     */
    public PuyuStudent selectPuyuStudentByStudentCode(String studentCode);

    /**
     * 查询最近一个学号学员信息
     * @param studentCode
     * @return
     */
    public PuyuStudent selectPuyuStudentCode(String studentCode);

    /**
     * 查询学员列表
     * 
     * @param puyuStudent 学员
     * @return 学员集合
     */
    public List<PuyuStudent> selectPuyuStudentList(PuyuStudent puyuStudent);

    /**
     * 根据姓名查询学员列表
     * @param studentName
     * @return
     */
    public List<PuyuStudent> selectStudentNameList(String studentName);

    /**
     * 查询学员消课记录
     *
     * @param puyuStudent 学员ID
     * @return 消课集合
     */
    @MapKey("lessonStudentId")
    public List<Map<String, Object>> selectStudentLessonList(PuyuStudent puyuStudent);

    /**
     * 查询学员训练记录
     * @param puyuStudent 学员信息
     * @return 训练集合
     */
    public List<PuyuStudent> selectStudentTrainingZeroList(PuyuStudent puyuStudent);

    /**
     * 查询学员训练记录
     * @param puyuStudent 学员信息
     * @return 训练集合
     */
    public List<PuyuStudent> selectStudentTrainingList(PuyuStudent puyuStudent);

    /**
     * 查询学员体能测试记录
     *
     * @param puyuStudent 学员ID
     * @return 体能测试集合
     */
    @MapKey("strengthTestId")
    public List<Map<String, Object>> selectStudentStrengthTestList(PuyuStudent puyuStudent);

    /**
     * 查询学员用户列表
     * @return 结果
     */
    @MapKey("userId")
    public List<Map<String, Object>> selectStudentUserList();

    /**
     * 查询学员家长用户列表
     * @return 结果
     */
    @MapKey("userId")
    public List<Map<String, Object>> selectStudentParentUserList();

    /**
     * 查询学员列表
     *
     * @return 结果
     */
    @MapKey("studentId")
    public List<Map<String, Object>> selectStudentList();

    /**
     * 查询未过期学员
     * @return 结果
     */
    @MapKey("studentId")
    public List<Map<String, Object>> listNotExpiredStudents();

    /**
     * 查询体能测试学员列表
     * @return
     */
    @MapKey("studentId")
    public List<Map<String, Object>> selectTestStudentList();

    /**
     * 新增学员
     * 
     * @param puyuStudent 学员
     * @return 结果
     */
    public int insertPuyuStudent(PuyuStudent puyuStudent);

    /**
     * 修改学员
     * 
     * @param puyuStudent 学员
     * @return 结果
     */
    public int updatePuyuStudent(PuyuStudent puyuStudent);

    /**
     * 增加学员已消课次数
     * @param studentId 学员ID
     * @return 结果
     */
    public int plusClassUsed(Long studentId);

    /**
     * 减少学员已消课次数
     * @param studentId 学员ID
     * @return 结果
     */
    public int subtractClassUsed(Long studentId);

    /**
     * 批量减少学员已消课次数
     * @param studentIds 学员ID数组
     * @return 结果
     */
    public int subtractClassUsedList(Long[] studentIds);

    /**
     * 逻辑删除指定学员
     * @param studentIds 学员主键数组
     * @return 结果
     */
    public int updatePuyuStudentByStudentIds(Long[] studentIds);

    /**
     * 删除学员
     * 
     * @param studentId 学员主键
     * @return 结果
     */
    public int deletePuyuStudentByStudentId(Long studentId);

    /**
     * 批量删除学员
     * 
     * @param studentIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePuyuStudentByStudentIds(Long[] studentIds);
}
